From 714332d3065a41e8bae61234cd231219cfcc95d6 Mon Sep 17 00:00:00 2001 From: Joan Torres Lopez Date: Tue, 3 Feb 2026 14:43:43 +0100 Subject: [PATCH] main: Call RegisterDisplay once UI has initialized RegisterDisplay is called to signal that graphics have settled, which allows GDM to terminate pending greeters and plymouth. Previously, RegisterSession was used for both recording the login and terminating greeters. This caused a race condition where the new user shell was setting up while the greeter was tearing down, leading to configuration conflicts during the asynchronous handoff. By splitting into RegisterSession (called early to record login) and RegisterDisplay (called after graphics settle), the greeter teardown is delayed until the new session has completed its initial modeset. Fixes: 32a01330 ("main: Register session with GDM on startup") Part-of: --- js/misc/loginManager.js | 18 ++++++++++++++++++ js/ui/main.js | 2 ++ 2 files changed, 20 insertions(+) diff --git a/js/misc/loginManager.js b/js/misc/loginManager.js index 5b3825748..a66ebed03 100644 --- a/js/misc/loginManager.js +++ b/js/misc/loginManager.js @@ -71,6 +71,24 @@ export async function registerSessionWithGDM() { } } +export async function registerDisplayWithGDM() { + log('Registering display with GDM'); + try { + await Gio.DBus.system.call( + 'org.gnome.DisplayManager', + '/org/gnome/DisplayManager/Manager', + 'org.gnome.DisplayManager.Manager', + 'RegisterDisplay', + null, null, + Gio.DBusCallFlags.NONE, -1, null); + } catch (e) { + if (!e.matches(Gio.DBusError, Gio.DBusError.UNKNOWN_METHOD)) + log(`Error registering display with GDM: ${e.message}`); + else + log('Not calling RegisterDisplay(): method not exported, GDM too old?'); + } +} + let _loginManager = null; /** diff --git a/js/ui/main.js b/js/ui/main.js index 1b917f988..f485e7b62 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -370,6 +370,8 @@ async function _initializeUI() { sessionMode.currentMode !== 'initial-setup') _handleLockScreenWarning(); + LoginManager.registerDisplayWithGDM(); + if (perfModule) { const perfOutput = GLib.getenv('SHELL_PERF_OUTPUT'); Scripting.runPerfScript(perfModule, perfOutput); -- 2.39.5